(()=>{
    console.log('================')

    // 可选参数
    // 默认参数 

    // ? 可选参数  lastName?:string
    function getFullName(firtName: string='东方', lastName?:string) :string {
        if(lastName) {
            return firtName + '_' + lastName 
        }else {
            return firtName
        }
    }
    console.log(getFullName())
    console.log(getFullName('诸葛'))
    console.log(getFullName('诸葛', '孙明'))
    
    // 剩余参数
    function showMsg(str: string, ...args: string[]) {
        console.log(str) // a
        console.log(args) // b,c,d,e
    }
    showMsg('a')
    showMsg('a', 'b', 'c', 'd', 'e')

    // 函数重载：函数名字相同，函数参数个数不同

    // 函数声明
    function add(x:string, y:string):string 
    function add(x:number, y:number):number
 
    function add(x:string|number, y:string|number) :string|number {
        if(typeof x === 'string' && typeof y === 'string') {
            return  x + y // 字符串拼接
        }else if(typeof x === 'number' && typeof y === 'number') {
            return x + y //数字相加
        }
    }

    console.log(add('诸葛', '孙明'))
    console.log(add(100, 20))
    // console.log(add(100, '诸葛'))
    // console.log(add('孙明', 20))



})()